package com.ziq.base.utils;


import android.content.Context;
import android.content.SharedPreferences;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Base64;

public class PUtil {

    private static final String SP_NAME = "sp_parcel";
    private static final String PARCEL_KEY = "parcel_key";

    //marshall Parcel将自身保存的数据以byte数组形式返回
    public static byte[] marshall(Parcelable parcelable) {
        Parcel parcel = Parcel.obtain();
        parcel.setDataPosition(0);
        parcel.writeValue(parcelable);
        byte[] bytes = parcel.marshall();
        parcel.recycle();
        return bytes;
    }

    //将bytes经过base64转换成字符串并存储到sp中
    public static void save(Context context, byte[] bytes) {
        SharedPreferences preferences = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        String saveStr = Base64.encodeToString(bytes, 0);
        editor.putString(PARCEL_KEY, saveStr);
        editor.apply();
    }

    //从sp中取出字符串并转换成bytes 然后bytes->Parcel->Object
    public static Object getParcel(Context context) {
        SharedPreferences preferences = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        byte[] bytes = Base64.decode(preferences
                .getString(PARCEL_KEY, "").getBytes(), Base64.DEFAULT);
        //从bytes中获取Parcel
        Parcel parcel = unmarshall(bytes);
        return parcel.readValue(context.getClassLoader());
    }

    //从byte数组中获取数据，存入自身的Parcel中
    private static Parcel unmarshall(byte[] bytes) {
        Parcel parcel = Parcel.obtain();
        parcel.unmarshall(bytes, 0, bytes.length);
        parcel.setDataPosition(0);
        return parcel;
    }
}

